package com.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import exceptions.InvalidArgumentException;

public class Util {

	public static Integer toInteger(String numero)
			throws InvalidArgumentException {
		try {
			if (numero == null)
				return null;
			return Integer.valueOf(numero.trim());
		} catch (NumberFormatException e) {
			throw new InvalidArgumentException(
					"No se Puede convertir al Tipo Integer el valor: " + numero);
		}
	}
	
	public static Long toLong(String numero)
			throws InvalidArgumentException {
		try {
			if (numero == null)
				return null;
			return Long.valueOf(numero.trim());
		} catch (NumberFormatException e) {
			throw new InvalidArgumentException(
					"No se Puede convertir al Tipo Long el valor: " + numero);
		}
		}

	public static Integer toIntegerStrict(String numero, String parametro)
			throws InvalidArgumentException {
		try {
			if (numero == null)
				throw new InvalidArgumentException("Parametro: '" + parametro
						+ "' esperado, es obigatorio");
			return Integer.valueOf(numero.trim());
		} catch (NumberFormatException e) {
			throw new InvalidArgumentException(
					"No se Puede convertir al Tipo Integer el valor: " + numero);
		}
	}

	public static Date toDate(String fecha, String parametro)
			throws InvalidArgumentException {
		try {
			if (fecha == null)
				throw new InvalidArgumentException("Parametro: '" + parametro
						+ "' esperado, es obigatorio");
			DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			return dateFormat.parse(fecha.trim());
		} catch (ParseException e) {
			throw new InvalidArgumentException(
					"No se Puede convertir al Tipo Date el valor: '" + fecha
							+ "' con el formato dia/Mes/a�o");
		}
	}

	public static Integer getEdad(Date fechaNacimento_) {
		if (fechaNacimento_ == null)
			return 0;
		Calendar fechaNacimento = new GregorianCalendar();
		fechaNacimento.setTime(fechaNacimento_);
		Calendar hoy = Calendar.getInstance();
		int annos = hoy.get(Calendar.YEAR) - fechaNacimento.get(Calendar.YEAR);
		fechaNacimento.add(Calendar.YEAR, annos);
		if (hoy.before(fechaNacimento))
			annos--;
		return annos > 0 ? annos : 0;
	}
}
